F9: Regression med dummyvariabler och modellval
Vi har hittills bara använt numeriska förklaringsvariabler i våra regressionsmodeller
Det är dock också möjligt att använda kategoriska förklaringsvariabler för att göra gruppvisa regressionsanalyser
Vi skulle t.ex. kunna dela upp analysen av bränsleförbrukning efter bilens växellåda (manuell/automatisk)
ifelse(), som går igenom varje värde av variabeln high_attendance
test = (GPA$high_attendance == "yes") betyder att funktionen för varje observation testar påståendet att high_attendance är “yes”1, och om påståendet är falskt blir observationen 0\[\widehat{\text{GPA}} = b_0 + b_1 \cdot \text{SAT} + b_2 \cdot \text{HighAttendance}\]
\[\widehat{\text{GPA}} = 0.644 + 0.0014 \cdot \text{SAT} + 0.223 \cdot \text{HighAttendance}\]
Koefficienten som är kopplad till dummyvariabeln visar hur kategorin som kodats till 1 förhåller sig till kategorin som kodats till 0
När vi kodade hög närvaro som 1 och ej hög närvaro som 0 fick vi \[\widehat{\text{GPA}} = 0.644 + 0.0014 \cdot \text{SAT} + 0.223 \cdot \text{HighAttendance}\]
Kategori 1 har högre snittpoäng än kategori 0
\[\widehat{\text{GPA}} = 0.867 + 0.0014 \cdot \text{SAT} - 0.223 \cdot \text{NotHighAttendance}\]
\[\widehat{\text{GPA}} = 0.867 + 0.0014 \cdot \text{SAT} - 0.223 \cdot \text{NotHighAttendance}\]
Båda modellerna kommer ge samma uppskattade snittbetyg för en given student
Detta beror på att interceptet förändras när vi kodar om dummyvariabeln
I denna modellen blir termen \(b_2 \cdot \text{NotHighAttendance}\) 0.223 lägre än i den första modellen för varje student, men interceptet är samtidigt 0.223 högre
I allmänhet gäller att modellen blir mer flexibel ju fler variabler vi lägger till, men detta kan vara både en styrka och en svaghet
Låt oss titta närmare på vad vi menar med att en modell är flexibel, och varför vi vill undvika att en modell för flexibel!
Vi har också talat om justerat \(R^2\) \[R_{\text{adj}}^2 = 1 - \cfrac{(1 - R^2)(n-1)}{n-k-1}\]
Vi vet att \(R_{\text{adj}}^2\) kan bli mindre när antalet variabler ökar, vilket betyder att \(R_{\text{adj}}^2\) tar så hänsyn till generaliserbarhet i viss mån
Det då är rimligt att försöka maximera \(R_{\text{adj}}^2\) när vi söker den bästa modellen
För att utvärdera en modell på testdata följer vi stegen nedan
Vi räknar ut RMSE på testdata med formeln \[\text{RMSE}_\text{test} = \sqrt{\cfrac{\sum_{i=1}^{n_\text{test}} (y_i - \hat{y}_i)^2}{n_\text{test}}},\]
Vi summerar över alla observationer i testdata, och \(n_\text{test}\) är så antalet observationer i testdata
Vi kommer ihåg att SSE (Sum of Squared Errors) betecknar summan av kvadrerade prediktionsfel, \[\text{RMSE}_\text{test} = \sum_{i=1}^{n_\text{test}} (y_i - \hat{y}_i)^2\]
Vi kan alltså skriva RMSE som \[\text{RMSE}_\text{test} = \sqrt{\cfrac{SSE_\text{test}}{n_\text{test}}}\]
Kvoten \(SSE_\text{test}/n_\text{test}\) brukar ofta kallas för MSE (Mean Squared Error)
Vi kan därför även skriva RMSE som \[\text{RMSE}_\text{test} = \sqrt{\text{MSE}_\text{test}}\]
model2 <- lm(y ~ x1 + x2 + x3, data=datatrain)
rsquared2 <- summary(model2)$r.squared
y_hatt_test <- predict(model2, newdata=datatest)
y_test <- datatest$y
SSE2 <- sum((y_test - y_hatt_test)^2)
n_test <- 30
MSE2 <- SSE2 / n_test
RMSE2 <- sqrt(MSE2)
sprintf("R-squared=%.7f, SSE=%.7f", rsquared2, SSE2)| Model | R.squared | SSE | MSE | RMSE |
|---|---|---|---|---|
| Model 1 | 0.8709888 | 146.0526 | 4.868421 | 2.206450 |
| Model 2 | 0.8710176 | 146.5229 | 4.884096 | 2.209999 |
# Räkna ut SSE(1)
carstest <- mtcars %>% slice(1:16)
carstrain <- mtcars %>% slice(17:32)
lmod1 <- lm(litermil ~ viktton, data=carstrain)
y_hatt1 <- predict(lmod1, newdata=carstest)
y1 <- carstest$litermil
SSE1 <- sum((y1 - y_hatt1)^2)
# Räkna ut SSE(2)
carstest <- mtcars %>% slice(17:32)
carstrain <- mtcars %>% slice(1:16)
lmod2 <- lm(litermil ~ viktton, data=carstrain)
y_hatt2 <- predict(lmod2, newdata=carstest)
y2 <- carstest$litermil
SSE2 <- sum((y2 - y_hatt2)^2)Vi skriver ut värdena på \(\text{SSE}_\text{test}^{(1)}\) och \(\text{SSE}_\text{test}^{(2)}\)
\[\text{SSE}_\text{CV} = \text{SSE}_\text{test}^{(1)} + \text{SSE}_\text{test}^{(2)} = 0.5331 + 1.0270 = 1.5601\]
\[\text{MSE}_\text{CV} = \cfrac{\text{SSE}_\text{CV}}{n} = \cfrac{1.5601}{32} = 0.04875312\] \[\text{RMSE}_\text{CV} = \sqrt{\text{MSE}_\text{CV}} = \sqrt{0.04875312}=0.2208011\]
Dessa slides skapades av Karl Sigfrid för kursen Statistik och Dataanalys I och har uppdaterats av Oskar Gustafsson och Valentin Zulj